Skip to content

Conversation

@Simyon264
Copy link
Member

@Simyon264 Simyon264 commented Oct 19, 2025

About the PR

This PR refactors the entirety of Admin Help.

Why / Balance

Admin Help was an old old system not up to standards at all. This PR refactors admin help, bringing it to modern codebase standards. This PR is made as a draft PR to get feature requests in and to allow early reviews where possible so that I do not have to refactor a refactor.

You can track current progress on this PR here:
https://jetfish.iterator.systems/projects/0199d82e-3c62-7e94-b61e-2c81db27118e

Use this link to view all current capabilities of the system and planned features.

Technical details

The bulk of the refactor is to atomize admin help. Admin Help is now based on prototypes.

- type: bwoinkChannel
  id: AdminHelp
  name: bwoink-channel-ahelp
  helpText: bwoink-channel-ahelp-help
  order: -1 # We always want this one to be the first
  features:
  - !type:SoundOnMessage
    sound: !type:SoundPathSpecifier
      path: /Audio/Effects/adminhelp.ogg
  - !type:RequiredFlags
    flags: Adminhelp

This allows modular adding of features to admin help without hardcoding many of the values.

The core pillar is that admin help is now split into "channels". These channels are shown via a selector in the F1 menu. The intent is that adding something like a "discord relay" is as simple as adding that to the feature of the channel and from there a separate manager goes and handles it.

For how this entire code is now structured:
BwoinkSystem is now BwoinkManager.
SharedBwoinkManager handles the shared utility methods. ServerBwoinkManager and ClientBwoinkManager handle the relevant implementations on their respective sides.

The server and client both hold a Conversations Dictionary. It is synced to the client, allowing for admins to see the full history of a player. Systems and other managers can easily hook into the admin help system via MessageReceived.
A message object holds the properties as you would expect: Sender, Time, Content and importantly the message flags.
The old system had messages use a complicated case of "just add more properties to the message object". While this works I opted for the more extendable system of adding an Enum to the message object "MessageFlags":

[Flags]
public enum MessageFlags : byte
{
    None = 0,

    /// <summary>
    /// The person who sent this message is a manager for this channel.
    /// </summary>
    Manager = 1,

    /// <summary>
    /// This message should not result in a sound.
    /// </summary>
    Silent = 2,

    /// <summary>
    /// This message can only be seen by other managers of this channel.
    /// </summary>
    ManagerOnly = 4,
}

I request that any feature requests and/or concerns regarding design be raised now so that I can fix them.

In its current form, the system works for basic ahelps, but I am still re-implementing the systems of the old ahelp.

Media

https://memory-conflux.iterator.systems/bwoink%20refactor_1.mp4
TODO.

Requirements

Breaking changes

TODO
BwoinkSystem.cs was removed on the client and server. Use BwoinkManager.cs

Changelog

@Simyon264 Simyon264 added the P1: High Priority: Higher priority than other items, but isn't an emergency. label Oct 19, 2025
@PJBot PJBot added S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. Changes: UI Changes: Might require knowledge of UI design or code. size/L Denotes a PR that changes 1000-4999 lines. labels Oct 19, 2025
@github-actions
Copy link
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@github-actions github-actions bot added the S: Merge Conflict Status: Needs to resolve merge conflicts before it can be accepted label Oct 19, 2025
@Samuka-C
Copy link
Contributor

Make the follow button work all the time

@Simyon264
Copy link
Member Author

does it NOT do that currently???

@Admiral-Obvious-001
Copy link
Contributor

does it NOT do that currently???

Nope. Sometimes it just doesn't follow the player at all.

Optionally, if the player disconnected, it should follow their last body instead.

@luckyshotpictures
Copy link
Contributor

does it NOT do that currently???

No, it does not. Whenever a user updates their mob (ghosts, polymorph, etc) you need to click off and on again for the entity to be correct.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please keep the quick actions for player interactions. Like follow, kick, ban, etc. I'm afraid that this will ruin the experience that admins have come to expect with the ahelp menu, also the player panel is frankly extremely slow and is unusable till data from the database is loaded in.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image its already on the todo

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, wasn't aware it was on the todo list.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My opinion on the actions list is there's definitely a way better way to do it than hardcoded buttons lmao

@Kowlin
Copy link
Contributor

Kowlin commented Oct 19, 2025

does it NOT do that currently???

Nope. Sometimes it just doesn't follow the player at all.

Optionally, if the player disconnected, it should follow their last body instead.

This is because the entity net ID is cached in the iteration of the of the ahelp panel, the ahelp panel does NOT refresh these when the entity gets removed anymore. The work around here is to select another player in the panel and then change back. So that the entity it tracks is updated to the current one.

# Conflicts:
#	Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml
#	Content.Client/UserInterface/Systems/Bwoink/AHelpUIController.cs
#	Content.Server/Entry/EntryPoint.cs
#	Content.Server/IoC/ServerContentIoC.cs
@github-actions github-actions bot removed the S: Merge Conflict Status: Needs to resolve merge conflicts before it can be accepted label Oct 19, 2025
@Simyon264
Copy link
Member Author

As an FYI, this PR could in theory also include Mentor Help. Just requires game admin signoff on how they want it.

@ScarKy0
Copy link
Contributor

ScarKy0 commented Oct 20, 2025

I will bring it up to the admins later today to ask about mhelp then

@Simyon264
Copy link
Member Author

https://memory-conflux.iterator.systems/bwoink%20refactor_1.mp4

Prototype uploading and the separate channels demonstrated.

@VasilisThePikachu VasilisThePikachu self-requested a review October 20, 2025 11:51
Allows to fully deny a requirement, always.
Synchronizes the entire bwoink state for a given session. This can be done in cases where the Conversations change server side (for example VV) and the client is not told about it.
@github-actions github-actions bot added the S: Merge Conflict Status: Needs to resolve merge conflicts before it can be accepted label Oct 23, 2025
@github-actions
Copy link
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A: Admin Tooling Area: Admin tooling and moderation. A: Core Tech Area: Underlying core tech for the game and the Github repository. Changes: UI Changes: Might require knowledge of UI design or code. P1: High Priority: Higher priority than other items, but isn't an emergency. S: Approved Status: Reviewed and approved by at least one maintainer; a PR may require another approval. S: Merge Conflict Status: Needs to resolve merge conflicts before it can be accepted S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. size/L Denotes a PR that changes 1000-4999 lines. T: Of Admin Interest Type: Affects administration work a lot, and might require admins to weigh in on T: Refactor Type: Refactor of notable amount of codebase

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants